/*!
 * \file ExpParser.h
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief 扩展行情解析器头文件
 * 
 * \details 本文件定义了扩展行情解析器类ExpParser：
 *          - 实现IParserApi接口，提供行情解析功能
 *          - 支持自定义行情数据源接入
 *          - 支持连接管理和状态监控
 *          - 支持合约订阅和退订
 *          - 支持行情数据解析和推送
 *          - 通过回调机制与数据服务系统集成
 *          - 支持多种行情数据格式和协议
 */
#pragma once
#include "../Includes/IParserApi.h"

USING_NS_WTP;

/**
 * @class ExpParser
 * @brief 扩展行情解析器类
 * 
 * @details ExpParser是WonderTrader数据服务系统的扩展行情解析器，负责：
 *          - 实现行情解析器接口
 *          - 管理与外部行情数据源的连接
 *          - 处理合约订阅和退订请求
 *          - 解析和推送实时行情数据
 *          - 维护解析器状态和连接状态
 *          - 通过回调机制与数据服务系统交互
 *          - 支持自定义行情数据格式和协议
 * 
 * @note 该类通过回调函数接收外部行情数据并推送到系统
 * @warning 需要确保行情数据的实时性和准确性
 */
class ExpParser : public IParserApi
{
public:
	/**
	 * @brief 构造函数
	 * @details 初始化扩展行情解析器
	 * @param id 解析器标识符
	 */
	ExpParser(const char* id):_id(id){}
	
	/**
	 * @brief 析构函数
	 * @details 清理资源，释放解析器
	 */
	virtual ~ExpParser(){}

public:
	/**
	 * @brief 初始化解析器
	 * @details 根据配置参数初始化扩展行情解析器
	 * @param config 配置参数对象
	 * @return bool 初始化是否成功
	 */
	virtual bool init(WTSVariant* config) override;

	/**
	 * @brief 释放解析器
	 * @details 释放解析器资源，清理连接和状态
	 */
	virtual void release() override;

	/**
	 * @brief 连接行情数据源
	 * @details 建立与外部行情数据源的连接
	 * @return bool 连接是否成功
	 */
	virtual bool connect() override;

	/**
	 * @brief 断开行情数据源连接
	 * @details 断开与外部行情数据源的连接
	 * @return bool 断开是否成功
	 */
	virtual bool disconnect() override;

	/**
	 * @brief 检查连接状态
	 * @details 检查与行情数据源的连接状态
	 * @return bool 是否已连接（默认返回true）
	 */
	virtual bool isConnected() override { return true; }

	/**
	 * @brief 订阅合约行情
	 * @details 订阅指定合约的实时行情数据
	 * @param setCodes 合约代码集合
	 */
	virtual void subscribe(const CodeSet& setCodes) override;

	/**
	 * @brief 退订合约行情
	 * @details 退订指定合约的实时行情数据
	 * @param setCodes 合约代码集合
	 */
	virtual void unsubscribe(const CodeSet& setCodes) override;

	/**
	 * @brief 注册解析器回调接口
	 * @details 注册解析器事件和数据回调接口
	 * @param listener 回调接口对象
	 */
	virtual void registerSpi(IParserSpi* listener) override;

private:
	std::string			_id;			/*!< 解析器标识符 */
	IParserSpi*			m_sink;			/*!< 解析器回调接口 */
	IBaseDataMgr*		m_pBaseDataMgr;	/*!< 基础数据管理器 */
};

